package at.donalfonso.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

import org.mozartspaces.capi3.Index;
import org.mozartspaces.capi3.Queryable;

@Queryable
public class Gruppe implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6419116903032484188L;

	@Index
	protected GruppeStatus status;

	private final String id;
	protected int numId;
	private static int uniqueId = 1000;
	
	private String zuweisKellner;
	private String tischId;
	private Boolean willBestellen = false;
	
	protected int filialID;
	
	protected ArrayList<Pizza.PizzaEnum> pizzen = new ArrayList<Pizza.PizzaEnum>();
	
	public Gruppe(int filialID, Pizza.PizzaEnum pizza1, Pizza.PizzaEnum pizza2, Pizza.PizzaEnum pizza3, Pizza.PizzaEnum pizza4){
		
		this.filialID = filialID;
		
		if (pizza1 != null){
			pizzen.add(pizza1);
			
		}
		if (pizza2 != null){
			pizzen.add(pizza2);
		}
		
		if (pizza3 != null){
			pizzen.add(pizza3);
		}
		
		if (pizza4 != null){
			pizzen.add(pizza4);
		}
		
		status = GruppeStatus.WARTEN;
		numId = getNextId();
		id = "G" + numId;
	}
	
	public GruppeStatus getStatus(){
		return status;
	}
	
	public void setStatus(GruppeStatus status){
		this.status = status;
	}
	
	public ArrayList<Pizza.PizzaEnum> getPizzen(){
		return pizzen;
	}

	@Override
	public String toString() {
		
		StringBuffer buffer = new StringBuffer();
		
		buffer.append("Gruppe " + id + " ("+filialID+"): "+status+ ": ");
		
		for (Iterator<Pizza.PizzaEnum> i = pizzen.iterator(); i.hasNext();){
			buffer.append(i.next() + " ");
		}
				
		return buffer.toString();
	}
	
	public String getId(){
		return id;
	}
/*	
	public void pizzaLiefern() {
		setStatus(GruppeStatus.ESSEN);
	}
*/	
	/**
	 * Erzeugt eine eindeutige GruppenID.
	 * @return eindeutige GruppenID.
	 */
	private static int getNextId() {
		return uniqueId++;
	}

	/**
	 * Überschrieben wegen Listanzeige
	 * gleiche Id bedeutet gleiche Gruppe
	 */
	public boolean equals(Object o) {
		if (this == o)
			return true;
		if ((o == null) || (o.getClass() != this.getClass()))
			return false;
		Gruppe g = (Gruppe) o;
		return (getId().equals(g.getId()));
	}

	public void setTischzuweisung(String kellnername) {
		zuweisKellner = kellnername;
	}
	
	public String getTischzuweisung() {
		return zuweisKellner;
	}

	public void setTischId(String id) {
		tischId = id;
	}
	
	public String getTischId() {
		return tischId;
	}
	
	public Boolean willBestellen() {
		return willBestellen;
	}
	
	public void setBestellWunsch(Boolean wunsch) {
		willBestellen = wunsch;
	}
	
	public int getFilialID() {
		return filialID;
	}

	public void setFilialID(int filialID) {
		this.filialID = filialID;
	}
}
